Repository navigation
feat(control): port temporal trajectory follower and follow-ups from X2 - #3371
Conversation
Use timestamps for nearest-point selection in MPC and PID when trajectory_reference_mode is temporal. Default remains spatial in C++ so existing tests without time_from_start still run. Source: #2957 (d287a8e), AWF#12886 (58433ba), #3138 (44d891d), #3072 (7831873). Skipped Taubin (#3041) and trajectory-steer feedforward (#3268) due to XX1 MPCTrajectory API drift. Co-authored-by: Cursor <cursoragent@cursor.com> Signed-off-by: YuxuanLiuTier4Desktop <619684051@qq.com>
|
Tick the box to add this pull request to the merge queue (same as
|
|
Two changes are needed to keep this temporal-controller port scoped and regression-resistant. [P2] Keep the Universe package default spatial. Add the temporal unit coverage from X2. The port adds substantial interpolation/resampling behavior but does not copy the relevant source tests: MPC temporal The explicitly omitted Taubin smoothing and trajectory-steer feedforward are not core temporal correctness blockers: Taubin mainly improves path/noise robustness, while steer feedforward requires extending XX1's |
Include the three-point stop helper from the lower stack PRs. Signed-off-by: YuxuanLiuTier4Desktop <619684051@qq.com> Co-authored-by: Cursor <cursoragent@cursor.com>
E2E opts into temporal via autoware_launch.xx1. Leave the Universe package YAML at spatial so standalone/non-E2E users are unchanged. Signed-off-by: YuxuanLiuTier4Desktop <619684051@qq.com> Co-authored-by: Cursor <cursoragent@cursor.com>
Temporal mode needs look-ahead PID, Taubin short-horizon curvature, confidence steer hold, and trajectory-steer feedforward. These land with the temporal controller, not as isolated extras. Signed-off-by: YuxuanLiuTier4Desktop <619684051@qq.com> Co-authored-by: Cursor <cursoragent@cursor.com>
Test resultI tested this changes with psim. export VEHICLE_ID=5
ros2 launch autoware_launch planning_simulator.launch.xml map_path:=$HOME/autoware_map/odaiba_stable vehicle_model:=jpntaxi sensor_model:=aip_xx1_gen2 planning_setting:=diffusion_planner✅ Working correctly
❌ Problem found
InvestigationThe suspected cause was the coincident trajectory points preserved by Diffusion Planner generates stop points at the same position with different To verify this, I changed only
This problem is expected to be resolved by updating planning pipeline to XX1 maybe |
|
@N-Iemura I think in X2 planner, we are using |
Bring in velocity modifier from #3379 now that it landed on the boundary-departure base. Merge instead of rebase: universe blocks force-push.
|
872f5e2
into
feat/e2e-foundation-x2-port-boundary-departure
…3370) * feat(planning_validator): add uncrossable-boundary departure plugin Reject the single planned trajectory on CRITICAL road-border departure and publish diagnostic boundary_departure for MRM. Source: X2 autoware_trajectory_validator uncrossable_boundary_departure d1ae5d0 (#3358), mapped onto planning_validator PluginInterface. Co-authored-by: Cursor <cursoragent@cursor.com> Signed-off-by: YuxuanLiuTier4Desktop <619684051@qq.com> * feat(trajectory_modifier): port velocity modifier from X2 (#3379) feat(trajectory_modifier): enable velocity modifier * feat(control): port temporal trajectory follower and follow-ups from X2 (#3371) * feat(control): port temporal trajectory_reference_mode from X2 Use timestamps for nearest-point selection in MPC and PID when trajectory_reference_mode is temporal. Default remains spatial in C++ so existing tests without time_from_start still run. Source: #2957 (d287a8e), AWF#12886 (58433ba), #3138 (44d891d), #3072 (7831873). Skipped Taubin (#3041) and trajectory-steer feedforward (#3268) due to XX1 MPCTrajectory API drift. Co-authored-by: Cursor <cursoragent@cursor.com> Signed-off-by: YuxuanLiuTier4Desktop <619684051@qq.com> * fix(control): keep follower package default spatial E2E opts into temporal via autoware_launch.xx1. Leave the Universe package YAML at spatial so standalone/non-E2E users are unchanged. Signed-off-by: YuxuanLiuTier4Desktop <619684051@qq.com> Co-authored-by: Cursor <cursoragent@cursor.com> * feat(control): port temporal MPC/PID follow-ups from X2 Temporal mode needs look-ahead PID, Taubin short-horizon curvature, confidence steer hold, and trajectory-steer feedforward. These land with the temporal controller, not as isolated extras. Signed-off-by: YuxuanLiuTier4Desktop <619684051@qq.com> Co-authored-by: Cursor <cursoragent@cursor.com> --------- Signed-off-by: YuxuanLiuTier4Desktop <619684051@qq.com> Co-authored-by: Cursor <cursoragent@cursor.com> --------- Signed-off-by: YuxuanLiuTier4Desktop <619684051@qq.com> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: iemura <iemura-n1207@keio.jp>
…3369) * feat(trajectory_modifier): adapt TrafficLightStop from X2 processor Extend InputData with map/route/TL and register a modifier plugin using modify_trajectory (not processor process()). Source: #3017 (0bc9698), AWF#12875 (502d264), Signed-off-by: YuxuanLiuTier4Desktop <619684051@qq.com> Co-authored-by: Cursor <cursoragent@cursor.com> #3091 (9fc3824), #3232 (f5f933e). * fix(trajectory_modifier): emit three-point temporal-safe stop trajectory Immediate-stop replacement used two identical zero-time points, which temporal PID/MPC reject. Match X2: three points at 0/dt/2dt with 1 mm offsets, and pass trajectory_time_step from all stop plugins. Signed-off-by: YuxuanLiuTier4Desktop <619684051@qq.com> Co-authored-by: Cursor <cursoragent@cursor.com> * feat(planning_validator): add uncrossable-boundary departure plugin (#3370) * feat(planning_validator): add uncrossable-boundary departure plugin Reject the single planned trajectory on CRITICAL road-border departure and publish diagnostic boundary_departure for MRM. Source: X2 autoware_trajectory_validator uncrossable_boundary_departure d1ae5d0 (#3358), mapped onto planning_validator PluginInterface. Co-authored-by: Cursor <cursoragent@cursor.com> Signed-off-by: YuxuanLiuTier4Desktop <619684051@qq.com> * feat(trajectory_modifier): port velocity modifier from X2 (#3379) feat(trajectory_modifier): enable velocity modifier * feat(control): port temporal trajectory follower and follow-ups from X2 (#3371) * feat(control): port temporal trajectory_reference_mode from X2 Use timestamps for nearest-point selection in MPC and PID when trajectory_reference_mode is temporal. Default remains spatial in C++ so existing tests without time_from_start still run. Source: #2957 (d287a8e), AWF#12886 (58433ba), #3138 (44d891d), #3072 (7831873). Skipped Taubin (#3041) and trajectory-steer feedforward (#3268) due to XX1 MPCTrajectory API drift. Co-authored-by: Cursor <cursoragent@cursor.com> Signed-off-by: YuxuanLiuTier4Desktop <619684051@qq.com> * fix(control): keep follower package default spatial E2E opts into temporal via autoware_launch.xx1. Leave the Universe package YAML at spatial so standalone/non-E2E users are unchanged. Signed-off-by: YuxuanLiuTier4Desktop <619684051@qq.com> Co-authored-by: Cursor <cursoragent@cursor.com> * feat(control): port temporal MPC/PID follow-ups from X2 Temporal mode needs look-ahead PID, Taubin short-horizon curvature, confidence steer hold, and trajectory-steer feedforward. These land with the temporal controller, not as isolated extras. Signed-off-by: YuxuanLiuTier4Desktop <619684051@qq.com> Co-authored-by: Cursor <cursoragent@cursor.com> --------- Signed-off-by: YuxuanLiuTier4Desktop <619684051@qq.com> Co-authored-by: Cursor <cursoragent@cursor.com> --------- Signed-off-by: YuxuanLiuTier4Desktop <619684051@qq.com> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: iemura <iemura-n1207@keio.jp> --------- Signed-off-by: YuxuanLiuTier4Desktop <619684051@qq.com> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: iemura <iemura-n1207@keio.jp>
* feat(traffic_light_compliance_checker): copy package from X2 e2e Port the checker library so TrafficLightStop can run on XX1 modifier. Source: #3009 (5d7ab5b), #3232 (f5f933e), copied tree #3346 (cd44e12). Co-authored-by: Cursor <cursoragent@cursor.com> Signed-off-by: YuxuanLiuTier4Desktop <619684051@qq.com> * feat(trajectory_modifier): adapt TrafficLightStop from X2 processor (#3369) * feat(trajectory_modifier): adapt TrafficLightStop from X2 processor Extend InputData with map/route/TL and register a modifier plugin using modify_trajectory (not processor process()). Source: #3017 (0bc9698), AWF#12875 (502d264), Signed-off-by: YuxuanLiuTier4Desktop <619684051@qq.com> Co-authored-by: Cursor <cursoragent@cursor.com> #3091 (9fc3824), #3232 (f5f933e). * fix(trajectory_modifier): emit three-point temporal-safe stop trajectory Immediate-stop replacement used two identical zero-time points, which temporal PID/MPC reject. Match X2: three points at 0/dt/2dt with 1 mm offsets, and pass trajectory_time_step from all stop plugins. Signed-off-by: YuxuanLiuTier4Desktop <619684051@qq.com> Co-authored-by: Cursor <cursoragent@cursor.com> * feat(planning_validator): add uncrossable-boundary departure plugin (#3370) * feat(planning_validator): add uncrossable-boundary departure plugin Reject the single planned trajectory on CRITICAL road-border departure and publish diagnostic boundary_departure for MRM. Source: X2 autoware_trajectory_validator uncrossable_boundary_departure d1ae5d0 (#3358), mapped onto planning_validator PluginInterface. Co-authored-by: Cursor <cursoragent@cursor.com> Signed-off-by: YuxuanLiuTier4Desktop <619684051@qq.com> * feat(trajectory_modifier): port velocity modifier from X2 (#3379) feat(trajectory_modifier): enable velocity modifier * feat(control): port temporal trajectory follower and follow-ups from X2 (#3371) * feat(control): port temporal trajectory_reference_mode from X2 Use timestamps for nearest-point selection in MPC and PID when trajectory_reference_mode is temporal. Default remains spatial in C++ so existing tests without time_from_start still run. Source: #2957 (d287a8e), AWF#12886 (58433ba), #3138 (44d891d), #3072 (7831873). Skipped Taubin (#3041) and trajectory-steer feedforward (#3268) due to XX1 MPCTrajectory API drift. Co-authored-by: Cursor <cursoragent@cursor.com> Signed-off-by: YuxuanLiuTier4Desktop <619684051@qq.com> * fix(control): keep follower package default spatial E2E opts into temporal via autoware_launch.xx1. Leave the Universe package YAML at spatial so standalone/non-E2E users are unchanged. Signed-off-by: YuxuanLiuTier4Desktop <619684051@qq.com> Co-authored-by: Cursor <cursoragent@cursor.com> * feat(control): port temporal MPC/PID follow-ups from X2 Temporal mode needs look-ahead PID, Taubin short-horizon curvature, confidence steer hold, and trajectory-steer feedforward. These land with the temporal controller, not as isolated extras. Signed-off-by: YuxuanLiuTier4Desktop <619684051@qq.com> Co-authored-by: Cursor <cursoragent@cursor.com> --------- Signed-off-by: YuxuanLiuTier4Desktop <619684051@qq.com> Co-authored-by: Cursor <cursoragent@cursor.com> --------- Signed-off-by: YuxuanLiuTier4Desktop <619684051@qq.com> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: iemura <iemura-n1207@keio.jp> --------- Signed-off-by: YuxuanLiuTier4Desktop <619684051@qq.com> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: iemura <iemura-n1207@keio.jp> --------- Signed-off-by: YuxuanLiuTier4Desktop <619684051@qq.com> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: iemura <iemura-n1207@keio.jp>
* feat(traffic_light_compliance_checker): copy package from X2 e2e Port the checker library so TrafficLightStop can run on XX1 modifier. Source: #3009 (5d7ab5b), #3232 (f5f933e), copied tree #3346 (cd44e12). Co-authored-by: Cursor <cursoragent@cursor.com> Signed-off-by: YuxuanLiuTier4Desktop <619684051@qq.com> * feat(trajectory_modifier): adapt TrafficLightStop from X2 processor (#3369) * feat(trajectory_modifier): adapt TrafficLightStop from X2 processor Extend InputData with map/route/TL and register a modifier plugin using modify_trajectory (not processor process()). Source: #3017 (0bc9698), AWF#12875 (502d264), Signed-off-by: YuxuanLiuTier4Desktop <619684051@qq.com> Co-authored-by: Cursor <cursoragent@cursor.com> #3091 (9fc3824), #3232 (f5f933e). * fix(trajectory_modifier): emit three-point temporal-safe stop trajectory Immediate-stop replacement used two identical zero-time points, which temporal PID/MPC reject. Match X2: three points at 0/dt/2dt with 1 mm offsets, and pass trajectory_time_step from all stop plugins. Signed-off-by: YuxuanLiuTier4Desktop <619684051@qq.com> Co-authored-by: Cursor <cursoragent@cursor.com> * feat(planning_validator): add uncrossable-boundary departure plugin (#3370) * feat(planning_validator): add uncrossable-boundary departure plugin Reject the single planned trajectory on CRITICAL road-border departure and publish diagnostic boundary_departure for MRM. Source: X2 autoware_trajectory_validator uncrossable_boundary_departure d1ae5d0 (#3358), mapped onto planning_validator PluginInterface. Co-authored-by: Cursor <cursoragent@cursor.com> Signed-off-by: YuxuanLiuTier4Desktop <619684051@qq.com> * feat(trajectory_modifier): port velocity modifier from X2 (#3379) feat(trajectory_modifier): enable velocity modifier * feat(control): port temporal trajectory follower and follow-ups from X2 (#3371) * feat(control): port temporal trajectory_reference_mode from X2 Use timestamps for nearest-point selection in MPC and PID when trajectory_reference_mode is temporal. Default remains spatial in C++ so existing tests without time_from_start still run. Source: #2957 (d287a8e), AWF#12886 (58433ba), #3138 (44d891d), #3072 (7831873). Skipped Taubin (#3041) and trajectory-steer feedforward (#3268) due to XX1 MPCTrajectory API drift. Co-authored-by: Cursor <cursoragent@cursor.com> Signed-off-by: YuxuanLiuTier4Desktop <619684051@qq.com> * fix(control): keep follower package default spatial E2E opts into temporal via autoware_launch.xx1. Leave the Universe package YAML at spatial so standalone/non-E2E users are unchanged. Signed-off-by: YuxuanLiuTier4Desktop <619684051@qq.com> Co-authored-by: Cursor <cursoragent@cursor.com> * feat(control): port temporal MPC/PID follow-ups from X2 Temporal mode needs look-ahead PID, Taubin short-horizon curvature, confidence steer hold, and trajectory-steer feedforward. These land with the temporal controller, not as isolated extras. Signed-off-by: YuxuanLiuTier4Desktop <619684051@qq.com> Co-authored-by: Cursor <cursoragent@cursor.com> --------- Signed-off-by: YuxuanLiuTier4Desktop <619684051@qq.com> Co-authored-by: Cursor <cursoragent@cursor.com> --------- Signed-off-by: YuxuanLiuTier4Desktop <619684051@qq.com> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: iemura <iemura-n1207@keio.jp> --------- Signed-off-by: YuxuanLiuTier4Desktop <619684051@qq.com> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: iemura <iemura-n1207@keio.jp> --------- Signed-off-by: YuxuanLiuTier4Desktop <619684051@qq.com> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: iemura <iemura-n1207@keio.jp> (cherry picked from commit 145e799)



Summary
trajectory_reference_mode: resample by time, not arc length).#2957):#3067)#3041)#3134,#3172)MPCTrajectory.steer(#3268)spatialfor standalone tests; E2E opts in via launcher#2190.Why these land together
Temporal following without the later X2 patches snaps steer on spatially collapsed DP trajs, mis-estimates curvature on short horizons, and treats hesitation as a stop. Modifier/optimizer plugin flags that rewrite
time_from_startare paired on the launcher PR, not isolated from this change.Test plan
colcon build --packages-select autoware_mpc_lateral_controller autoware_pid_longitudinal_controller autoware_trajectory_follower_nodecolcon test --packages-select autoware_mpc_lateral_controller autoware_pid_longitudinal_controllerNotes for reviewers
ff_scale_min/max(#2948) was already on XX1.#3138) is in the first temporal commit; do not re-apply#3050/#3072as originally written.steering_direct_passthrough/ MPPI skip-QP (X2 defaultfalse).feat/v0.64/e2e:#2957,#3041,#3067,#3134,#3138,#3172,#3268.Stack
Depends on #3370. Merge from the bottom.